package com.lanou3g.code0404.morning;

// 返回值
// 1.add方法作用:接收2个int类型的值
//              并求和
// int add(int num2,int num2){}中
// 第一个 int 叫做返回值类型
// 用来表示:这个方法可以返回给调用方
//         一个什么类型的数据
public class  Foo2 {
    int add(int num1, int num2) {
        int result = num1 + num2;
        //如果 返回值类型这里写的不是void
        //则这个方法 必须有明确的返回值
        //即 必须写出return 关键字
        // return 关键字后 跟着 要返回的结果
        return result;
    }

    void fun() {
        System.out.println("这个方法没有返回值");
    }

    /*
    return 专门用在方法中,
    这个关键字的作用是:直接,结束一个方法,
    即在return后的代码,全部都不会执行

    如果一个方法声明了有返回值,那么必须写return 返回值;
    如果一个方法声明了没有返回值(void),那么可以省略return;
    并且由于没有返回值,那么即使写了return;
     后面也不需要写要返回的值
     */
    /*
    打印一个数组
    */
    void printArr(int[] arr) {
        if (arr == null) {
            //防御式编程
            //这个if 不写 就是契约式编程
            System.out.println("你有没有new,自己心里没点数吗");
            //当执行到return的时候,方法会无条件
            //结束
            return;
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i != arr.length - 1) {
                System.out.print(",");
            }
        }
        System.out.println("]");
    }

    //但凡我们要改变一个字符串的值
    // 就必须要有返回值
    String fun3(String s) {
        s = "Echo:" + s;
        return s;
    }

    Table fun4(Table a) {
        a.color = "red";
        a.legCount = 4;
        return a;
    }
    //可以用...表示不确定个数的参数
    //不是很常用,但是有这样的写法
    //在方法里使用的时候,
    //nums 其实就是个int类型的数组
    int addAll(int ... nums){
        int sum=0;
        for (int i = 0; i < nums.length; i++) {
            sum+=nums[i];
        }
        return sum;

    }
}

